package microjavacompiler.egg;

import java.io.* ;
import mg.egg.eggc.libjava.*;
import java.util.* ;

/**
* Pour analyser les arguments de la ligne de commandes.
* Une instance est automatiquement cr��e par EGG
* qui en fait un attribut s�mantique de l'axiome
* <pre>
* Dans MJAVA.m
*    ... 
*    PROGRAMME^options.getNom()    
*    ... 
* </pre>
* @author MG2005
*/
public class MJAVAOptions extends Options{
  final private static int X86 = 0;
  final private static int TAM = 1;
  final private static int SPARC = 2;
  final static String procs[] = {"x86", "tam", "sparc"};
  
  private int lang = TAM ;

/**
* Pour connaitre la valeur du langage de generation
* @return 1 si X86, 2 si TAM  ou 3 si SPARC
*/
  public int getLang(){
    return lang;
    }

  public String getProc(){
    return procs[lang];
    }

  private String fileIn;
  
/**
* Pour connaitre le nom du fichier � analyser
* @return le nom du fichier
*/
  public String getFileIn(){
    return fileIn;
    }

  private String nom ;
/**
* Pour connaitre le nom de la classe analys�e
* qui est le nom du fichier sans l'extension '.java'
* @return le nom de la classe
*/
  public String getNom(){
    return nom;
    }

/**
* Constructeur � partir des arguments de la ligne de commande
*/
  public MJAVAOptions ( String[] a) {
    args = a;
    }

/**
* Analyse des arguments. Si vous souhaitez ajouter des options
* ou modifier (ou meme supprimer) des options pas de probl�me !
* Attention, cette m�thode est automatiquement appel�e dans
* le 'main' du compilateur engendr�. Inutile de l'appeler
* explicitement.
* @exception EGGException si les options ne sont pas correctes.
*/
  public void analyse () throws EGGException{
    // le nom du ficher a analyser
    if ( (args != null) && (args.length>0) && (args[0].length()!=0) ) {
      fileIn = new String(args[0]);
      nom = args[0] ;
      if ( nom.endsWith ( ".java" ) ) {
        nom = nom.substring(0 , nom.length() - 5 ) ;
        } 
      else {
        throw new EGGException("Le nom du fichier doit avoir le suffixe '.java'");
        }
      } 
    else {
      throw new EGGException(getUsage());
      }
    if ( nom.length() > 0 ) {
      int index = nom.lastIndexOf ( File.separatorChar ) ;
      if ( index > 0 ) {
        nom = nom.substring ( index+1 ) ;
        }
      }
    // les autres options
    for ( int i = 1 ; i < args.length ; i++ ) {
      // langage de generation
      if ( args[i].equals ( "-s" ) ) {
        if ( i+1 < args.length ) {
          i++ ;
          if ( args[i].equals ( "x86" ) ) {
            lang = X86 ;
            } 
          else if ( args[i].equals ( "tam" ) ) {
            lang = TAM ;
            } 
          else if ( args[i].equals ( "sparc" ) ) {
            lang = SPARC ;
            } 
          else {
            throw new EGGException(getUsage());
            }
          }
        } 
      // l'aide
      else if ( args[i].equals ( "-?" ) ) {
        throw new EGGException(getUsage());
        } 
      // erreur
      else {
        throw new EGGException(getUsage());
        }
      }
    }

/**
* Affiche les options correctes en cas d'erreur
*/
  public String getUsage(){
    StringBuffer sb= new StringBuffer();
    sb.append("\nusage : mjava.java.MJAVAC <file>\n");
    sb.append("[-s] [x86 | tam | sparc]\n");
    sb.append("[-?]\n");
    return sb.toString();
  }

/**
* Affiche l'aide sur les options
*/
  public String getHelp(){
    StringBuffer sb= new StringBuffer();
    sb.append("\nusage : majva.java.MJAVAC <file>\n");
    sb.append("[-s] [x86 | tam | sparc] : assembleur engendr�\n");
    sb.append("[-?] : cette aide.\n");
    return sb.toString();
  }

}
